Skip to content

feat(landing): single-viewport on md+, /resume keeps its own scroll#21

Merged
Ross (ross-makeacompany) merged 1 commit into
masterfrom
feat/landing-no-scroll-resume-keeps-scroll
Jun 8, 2026
Merged

feat(landing): single-viewport on md+, /resume keeps its own scroll#21
Ross (ross-makeacompany) merged 1 commit into
masterfrom
feat/landing-no-scroll-resume-keeps-scroll

Conversation

@ross-makeacompany

Copy link
Copy Markdown
Contributor

Grant flagged on iPad that grantfoster.dev landing scrolls when it should be one screen. `/resume` should still scroll because it's long-form content.

Root cause

`src/app/layout.tsx` wrapped children in `<div className="… overflow-y-auto">` unconditionally. That defeated the `md:overflow-hidden` chained through five flex wrappers in `src/app/page.tsx` — even though the landing page tried to clamp itself, the layout's scroll container won.

Fix

File Change
`layout.tsx` wrapper becomes `overflow-y-auto md:overflow-y-hidden`. Mobile keeps auto-scroll; desktop + iPad clamp to one viewport.
`resume/page.tsx` `` adds `md:h-full md:overflow-y-auto` so the long-form resume page reintroduces its own scroll container at md+.

Net effect: layout is "permissive on mobile, clamped on md+" and long-form routes opt back in.

What this unblocks going forward

Future single-screen pages (coming-soon, project landings) inherit the no-scroll default without code. New long-form pages add `md:h-full md:overflow-y-auto` on their root.

Verification

  • `tsc --noEmit` clean
  • `next build` clean (all routes prerender as before, including `/`, `/resume`, sitemap/robots/og)
  • Visual verify after deploy: open grantfoster.dev on iPad landscape — landing fits, no scroll; /resume still scrolls.

🤖 Generated with Claude Code

Grant flagged on iPad: grantfoster.dev landing scrolls when it should
be one screen. /resume should still scroll because it's long-form
content.

Root cause: the layout wrapper used overflow-y-auto unconditionally,
which let the Hero overflow the viewport on iPad/desktop even though
src/app/page.tsx already had md:overflow-hidden chained through five
flex wrappers.

Fix:
- layout.tsx: wrapper becomes overflow-y-auto md:overflow-y-hidden.
  Mobile keeps the auto-scroll. Desktop + iPad clamp.
- resume/page.tsx: main adds md:h-full md:overflow-y-auto so the
  long-form resume page reintroduces its own scroll container at md+.

This puts the layout in 'permissive on mobile, clamped on md+' mode
and lets long-form routes opt back in. Future single-screen pages
(e.g. coming-soon, project landings) inherit the no-scroll default
without code; new long-form pages just add md:h-full md:overflow-y-auto
on their root.

Build green (next build), tsc --noEmit clean.
@ross-makeacompany Ross (ross-makeacompany) merged commit 13a8458 into master Jun 8, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant